<?php
/**
 * Savoir si un chaîne contient une ou plusieurs expressions données
 * @param exp: les expressions recherchées separées par des 'ou' (par exemple 'exp1|exp2|exp3')
 * @param string: la chaîne à examiner
 * @return true si les expressions sont trouvées dans la chaîne, false sinon
 */
function contains($exp, $string)
{
	return preg_match('/'.$exp.'/i', $string);
}

/**
 * Obtenir la valeur du premier paramètre d'une URL
 * @param uri: l'url à analyser au format /folder/folder/../param1-param2-param3
 * @return la valeur du premier paramètre. "/site/pronos-4-asc" retourne "pronos"
 */
function get_pageval($uri) {
	$uri = explode('/', $uri);
	$uri = $uri[sizeOf($uri)-1];
	if(contains('-', $uri)) {
		$uri = explode('-', $uri);
		return $uri[0];
	}
	else
		return $uri;
}

/**
 * Génération d'un password aléatoire
 * @param size: la taille désirée pour le password (6 par défaut)
 * @return une chaîne de caractères composées de chiffres et lettres minuscules de N caractères (N = size)
 */
function generate_password($size = 6)
{
	return strtolower(substr(base64_encode(md5(rand())), 0, $size));
}

/**
 * Obtenir le lien 'réel' de la page précédente, quelque soit le contexte
 */
function get_previous_link()
{
	$tab = explode('/', $_SERVER['HTTP_REFERER']);
	$size = count($tab);
	return $tab[--$size];
}

/**
 * Retour le lien avec l'id "current" s'il correspond à la page active
 */
function show_link($link, $name)
{
	echo '<a href="'.$link.'"';	
	if (isset($_SERVER['REDIRECT_URL']) && $link == basename($_SERVER['REDIRECT_URL'])) {
		echo' id="current"';
	}
	echo '>'.$name.'</a>';
}

/**
 * Nettoyer une chaîne de caractères issue d'un formulaire
 */
function clean_str($str)
{
	$str = htmlspecialchars(trim($str));
	if (get_magic_quotes_gpc()) {
		$str = stripslashes($str);
	}
	return $str;
}

/**
 * Variante qui laisse les tags HTML intactes
 */
function clean_str_preserve_tags($str)
{
	$str = trim($str);
	if (get_magic_quotes_gpc()) {
		$str = stripslashes($str);
	}
	return $str;
}

/**
 * Détermine si un nom est valide
 * @return true si le nom est bon, sinon false
 */
function valid_nom($nom)
{
	return preg_match('/^[a-zA-Zàâéèëêïîôùüç -]{2,20}$/', $nom);
}

/**
 * Détermine si un champs est vide
 * @return true si non vide, sinon false
 */
function valid_vide($vide)
{
	return (!(preg_match('/^$/', $vide)));
}

/**
 * Détermine si une adresse e-mail est valide
 * @return true si l'adresse est bonne, sinon false
 */
function valid_email($email)
{
	return preg_match('/^([\w._-]+@[a-z._-]+?\.[a-z]{2,4})$/i', $email);
}

/**
 * Détermine si un numéro de téléphone est valide (10 chiffres, commence par 0)
 */
function valid_phone($phonenumber)
{
	return preg_match('/^[0-9]{10}$/', $phonenumber);
}

/**
 * Détermine si un code postal est valide
 */
function valid_postal_code($code)
{
	return preg_match('/^[A-Z0-9-]{3,6}$/', $code);
}

/**
 * Afficher un tableau sous form de liste
 */
function print_array($tab)
{
	echo '<ul class="list">';
	foreach ($tab as $item)
	{
		echo '<li>'.$item.'</li>';
	}
	echo '</ul>';
}

/**
 * Fonction de récupération du chemin relatif vers un fichier
 * @param path: le chemin 'minimal' vers le fichier desiré
 * @return une chaine de caractères contenant le chemin vers le fichier
 */
function get_path($path)
{
	return file_exists($path) ? $path : get_path('../'.$path);
}

/**
 * Crypter un mot de passe (SHA1 inversé)
 */
function crypt_password($password)
{
	return invert_hash(sha1($password));
}

/**
 * Afficher un nombre au format 1er / 1ère / 3ème / 23ème...
 * @param number: le nombre à afficher
 * @param gender: f ou m, se rapporte à quelque chose de féminin/masculin
 */
function display_number($number, $gender = 'f') {
	if($number == 1)
		return $gender == 'f' ? '1ère' : '1er';
	else
		return $number.'ème';
}

/**
 * Envoie d'un mail
 * @param s: l'email de l'expéditeur
 * @param r: l'email du destinataire
 * @param n: la chaine qui sera affichée pour l'expéditeur (ex: Prenom Nom)
 * @param o: l'objet de l'email qui sera envoyé
 * @param message: le message à envoyer à l'équipe adrénaline
 * @return true si le mail a bien été envoyé, false sinon
 */
function send_mail($s, $r, $n, $o, $m)
{
	// préparation envoyeur et destinataire
	$contact = $n;
	$sender = $s;
	$receiver = $r;
	
	// en-têtes
	$headers  = 'MIME-Version: 1.0'."\n";
    $headers .= 'From: "'.$contact.'"<'.$sender.'>'."\n";
    $headers .= 'Reply-To: '.$sender."\n";
    $headers .= 'Content-Type: text/plain; charset="utf-8"'."\n";
    $headers .= 'Content-Transfer-Encoding: 8bit';
	
	// preparation de l'objet
	$object = $o;
	
	// préparation du contenu du mail
	$content  = $m;
	
	// envoi du mail et retour du résultat (true ou false)
	return mail($receiver, $object, $content, $headers);
}

/**
 * Ajouter des sauts de ligne au textarea
 */
function ajout_saut_ligne($str)
{
	$str = nl2br($str);
	return $str;
}

